From 7883c1304a6da45c5430b1f5caf17a769d03d625 Mon Sep 17 00:00:00 2001 From: "kaf24@firebug.cl.cam.ac.uk" Date: Thu, 14 Apr 2005 22:37:40 +0000 Subject: [PATCH] bitkeeper revision 1.1300 (425ef0b4lXDHXsulXDmrVOvOZAhPXQ) Do not STI when transitioning from user to kernel mode in x86/64 Xen. Otherwise, by directly entering restore_all_guest without first executing test_all_events, we risk ignoring pending softirq and event-delivery work. Signed-off-by: Keir Fraser --- xen/arch/x86/x86_64/entry.S | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/xen/arch/x86/x86_64/entry.S b/xen/arch/x86/x86_64/entry.S index 2002acd9ce..5cee142c18 100644 --- a/xen/arch/x86/x86_64/entry.S +++ b/xen/arch/x86/x86_64/entry.S @@ -19,6 +19,14 @@ movq (reg),reg; ALIGN +/* %rbx: struct exec_domain, interrupts disabled */ +switch_to_kernel: + leaq EDOMAIN_trap_bounce(%rbx),%rdx + movq EDOMAIN_syscall_addr(%rbx),%rax + movq %rax,TRAPBOUNCE_eip(%rdx) + movw $0,TRAPBOUNCE_flags(%rdx) + call create_bounce_frame + /* %rbx: struct exec_domain */ restore_all_guest: RESTORE_ALL @@ -104,20 +112,12 @@ ENTRY(syscall_enter) pushq $0 movl $TRAP_syscall,4(%rsp) SAVE_ALL - sti GET_CURRENT(%rbx) testb $TF_kernel_mode,EDOMAIN_thread_flags(%rbx) - jnz hypercall + jz switch_to_kernel - leaq EDOMAIN_trap_bounce(%rbx),%rdx - movq EDOMAIN_syscall_addr(%rbx),%rax - movq %rax,TRAPBOUNCE_eip(%rdx) - movw $0,TRAPBOUNCE_flags(%rdx) - call create_bounce_frame - jmp restore_all_guest - -/* %rbx: struct exec_domain */ -hypercall: +/*hypercall:*/ + sti movq %r10,%rcx andq $(NR_hypercalls-1),%rax leaq SYMBOL_NAME(hypercall_table)(%rip),%r10 -- 2.30.2